package cc.openkit.admin.util;

import cc.openkit.admin.vo.ProjectVo;

import java.io.*;

/**
 * 复制项目的 java 工具类
 */

public class FileUpdateCopyUtil {

    /**
     * @author itmyhome
     */
    public static void main(String[] args) {
        File f = new File("/Users/benhailong/Desktop/111/rrr/1111");

        String newStr = "unpor_meifa";
        String oldStr = "unpor_baby";

//        print(f, 0, oldStr, newStr);
    }

    /**
     * 复制文件
     */
    public void fileCopy(ProjectVo projectVo ) {
        File f = new File(StaticFinalVar.OLD_URL);

        String newStr = projectVo.getSign();
        String oldStr = "unpor_baby";

        print(f, 0, oldStr, projectVo);
    }



    /**
     * 遍历文件夹
     *
     * @param f
     * @param len
     */
    public static void print(File f, int len, String oldStr, ProjectVo projectVo ) {
        File[] file = f.listFiles();

        for (int i = 0; i < file.length; i++) {
            if (file[i].isDirectory()) { //判断是否文件夹
                print(file[i], len + 1, oldStr, projectVo);
            }

            // 为防止输出文件覆盖源文件，所以更改输出盘路径 也可自行设置其他路径
            File outPath = new File(file[i].getParent().replace(StaticFinalVar.OLD_URL, StaticFinalVar.NEW_URL+"/"+projectVo.getSign()+"/"));
            File readfile = new File(file[i].getAbsolutePath());

            if (!readfile.isDirectory()) {
                String filename = readfile.getName(); // 读到的文件名
                String absolutepath = readfile.getAbsolutePath(); // 文件的绝对路径
                readFile(absolutepath, filename, i, outPath, oldStr, projectVo); // 调用 readFile
            }
        }
    }

    /**
     * 读取文件夹下的文件
     *
     * @return
     */
    public static void readFile(String absolutepath, String filename,
                                int index, File outPath, String oldStr, ProjectVo projectVo) {
        try {
            BufferedReader bufReader = new BufferedReader(new InputStreamReader(
                    new FileInputStream(absolutepath), "utf-8")); // 数据流读取文件

            StringBuffer strBuffer = new StringBuffer();

            String oldStrB = oldStr.substring(0, 1).toUpperCase() + oldStr.substring(1);
            String newStrB = projectVo.getSign().substring(0, 1).toUpperCase() + projectVo.getSign().substring(1);

            for (String temp = null; (temp = bufReader.readLine()) != null;
                 temp = null) {
                if ((temp.indexOf(oldStr) != -1) &&
                        (temp.indexOf(oldStr) != -1)) { // 判断当前行是否存在想要替换掉的字符
                    temp = temp.replace(oldStr, projectVo.getSign()); // 此处进行替换
                }else if((temp.indexOf(oldStrB) != -1) &&
                        (temp.indexOf(oldStrB) != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace(oldStrB, newStrB); // 此处进行替换
                }else if((temp.indexOf("{name}") != -1) &&
                        (temp.indexOf("{name}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{name}", projectVo.getProjectName()); // 此处进行替换
                }else if((temp.indexOf("{ability}") != -1) &&
                        (temp.indexOf("{ability}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{ability}", projectVo.getDescribe()); // 此处进行替换
                }else if((temp.indexOf("{description}") != -1) &&
                        (temp.indexOf("{description}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{description}", projectVo.getDescribe()); // 此处进行替换
                }else if((temp.indexOf("{author}") != -1) &&
                        (temp.indexOf("{author}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{author}", projectVo.getAuthor()); // 此处进行替换
                }else if((temp.indexOf("{url}") != -1) &&
                        (temp.indexOf("{url}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{url}", projectVo.getWeb()); // 此处进行替换
                }else if((temp.indexOf("{setting}") != -1) &&
                        (temp.indexOf("{setting}") != -1)){
                    // 如果存在手写字母大写的也会修改
                    temp = temp.replace("{setting}", projectVo.getDescribe()); // 此处进行替换
                }


                strBuffer.append(temp);
                strBuffer.append(System.getProperty("line.separator")); // 换行符
            }

            bufReader.close();

            if (outPath.exists() == false) { // 检查输出文件夹是否存在，若不存在先创建
                outPath.mkdirs();
                System.out.println("已成功创建输出文件夹：" + outPath);
            }

            PrintWriter printWriter = new PrintWriter(outPath + "/" +
                    filename, "utf-8"); // 替换后输出文件路径
            printWriter.write(strBuffer.toString().toCharArray()); //重新写入
            printWriter.flush();
            printWriter.close();
            System.out.println("第 " + (index + 1) + " 个文件   " + absolutepath +
                    "  已成功输出到    " + outPath + "/" + filename);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
